home *** CD-ROM | disk | FTP | other *** search
- /*
- 8086|Printman/POSTCARD 汎用下請けモジュール
-
- Copyright (c) 1993,94 Delmonta
-
- */
-
- #include<stdlib.h>
- #include<jctype.h>
- #include"dprint.h"
-
- /*---------------------------------------------------------------------------*/
-
- void card_reshow(bitmap val)
- {
- int i;
-
- struct POSTCARD pcard;
-
- if (Cardnum == Cardpos)
- {
- pcard.zipcode[0] = -1;
-
- for (i=0 ; i<DATANUM ; i++)
- pcard.data[i][0] = '\0';
- }
- else
- pcard = *Card[Cardpos]; /* 構造体の一括コピー */
-
- if (val & 1)
- {
- printf("\033[6;33f");
-
- if (pcard.zipcode[0]==-1) /* 郵便番号なし */
- printf(" - \n");
- else if (pcard.zipcode[1]==-1) /* 上3桁のみ */
- printf("%03d- \n",pcard.zipcode[0]);
- else /* 5桁とも指定 */
- printf("%03d-%02d\n",
- pcard.zipcode[0],pcard.zipcode[1]);
- }
-
- for (i=0 ; i<DATANUM ; i++)
- {
- if (val & (2<<i))
- printf("\033[%d;33f%-24s\n",i+7,pcard.data[i]);
- }
- }
-
- /*---------------------------------------------------------------------------*/
-
- void dp_putcardnum(void)
- {
- printf("\033[24;62f\033[7;37m" "カード %4u/%4u" "\033[0m",
- Cardpos+1,Cardnum);
- }
-
- static char Ungetch_buf[2];
- static unsigned Ungetch_num;
-
- /*---------------------------------------------------------------------------*/
-
- void dp_ungetch(char c)
- {
- Ungetch_buf[Ungetch_num++] = c;
- }
-
- char dp_getch(void)
- {
- void exit(int);
- char c;
-
- if (Ungetch_num) /* バッファに文字がたまっているか */
- return Ungetch_buf[--Ungetch_num];
-
- rep:
- c = getch();
-
- if (c==3)
- exit(EXITCODE_CTRLC);
-
- if (c=='\033' && kbhit()) /* 特殊キーか */
- return EXTKEY_H;
-
- else if (c=='\0') /* IBM PCの特殊キーコードは0x00で */
- { /* はじまり、EXTKEY_Hと混同して誤 */
- putchar('\7'); /* 動作する可能性がある */
- getch();
- goto rep;
- }
-
- switch (c) /* キャラクタコード変換 */
- {
- case '\n': c = DOWNKEY; break; /* 98→TOWNS */
- case 'K'-0x40: c = UPKEY; break;
- case 'L'-0x40: c = RIGHTKEY; break;
-
- case '\x1d': c = LEFTKEY; break; /* TOWNS→98 */
- /* BSを処理するため */
-
- case 'E'-0x40: c = UPKEY; break; /* ダイヤモンドカーソル */
- case 'S'-0x40: c = LEFTKEY; break;
- case 'D'-0x40: c = RIGHTKEY; break;
- case 'X'-0x40: c = DOWNKEY; break;
- }
-
- return c;
- }
-
- /*---------------------------------------------------------------------------*/
-
- char dp_errmes(const char *s)
- {
- char c;
-
- printf("\033[%d;1f\033[K\033[33m%s",ERRMES_LINE,s);
-
- c = dp_getch();
- if (c==EXTKEY_H) /* 特殊キーの入力を捨てる */
- {
- dp_getch();
- }
- printf("\033[37m\033[2K\n");
-
- return c;
- }
-
- /*---------------------------------------------------------------------------*/
-
- bool strinput(char *buf,unsigned len)
- {
- unsigned strlen(char *);
-
- int _ctypebuf[80];
- int *ctypebuf = _ctypebuf + 1;
-
- unsigned l = 0; /* 入力中の文字列の長さ */
- unsigned i;
- char c;
-
- _ctypebuf[0] = CT_ANK;
-
- while ((c=*buf)!='\0')
- {
- putchar(c);
-
- *ctypebuf = chkctype(c,*(ctypebuf-1));
-
- buf++;
- ctypebuf++;
- l++;
- }
-
- for (i=l ; i<len ; i++)
- putchar(' ');
-
- for (i=l ; i<len ; i++)
- putchar('\010');
-
- strin_keyrep:
-
- c = dp_getch();
-
- if (c=='\010' && l)
- {
- do
- {
- printf("\010 \010");
- l--;
- buf--;
- } while( *--ctypebuf==CT_KJ2 || *ctypebuf==CT_ILGL);
-
- }
- else if (c=='\r' || c=='\033')
- {
- *buf = '\0';
-
- if (c=='\r')
- return TRUE;
- else
- return FALSE;
- }
- else if (c>=' ' && l<len)
- {
- *ctypebuf = chkctype(c,*(ctypebuf-1));
-
- if (*ctypebuf == CT_KJ1 && l==len-1)
- { /* バッファの最後に漢字の第1バイトが */
- dp_getch(); /* 来た場合はその漢字全体を捨てる */
- putchar('\7');
- }
- else
- {
- l++;
- *buf++ = c;
- ctypebuf++;
- putchar(c);
- }
- }
- else
- {
- if (c==EXTKEY_H) /* 特殊キーのコードは捨てる */
- dp_getch();
-
- putchar('\7');
- }
- goto strin_keyrep;
- }
-
- /*---------------------------------------------------------------------------*/
-
- bool addcard(unsigned cardpos)
- {
- int i;
- void far *farmalloc(long);
- struct POSTCARD far *p;
-
- if (cardpos>=MAXCARD)
- {
- dp_errmes("これ以上カードは増やせません.");
- return FALSE;
- }
-
- p = (struct POSTCARD far *)farmalloc(sizeof(struct POSTCARD)) + 0L;
- if (p==NULL)
- {
- dp_errmes("メモリ不足です.");
- return FALSE;
- }
-
- Card[cardpos] = p;
-
- p->zipcode[0] = p->zipcode[1] = -1;
- for (i=0 ; i<5 ; i++)
- p->data[i][0] = '\0';
-
- return TRUE;
- }
-
- /*---------------------------------------------------------------------------*/
-
- int dp_getval(void)
- {
- char buf[5];
- buf[0] = '\0';
-
- if (strinput(buf,4) && buf[0]!='\0')
- {
- int a = atoi(buf);
-
- if (a<0)
- a = -a;
-
- return a;
- }
- else
- return -1;
- }
-
- /*---------------------------------------------------------------------------*/
-
- bool dp_getval2(fract *val)
- {
- unsigned strlen(char *);
- fract i;
- char buf[8];
-
- getval2_rep:
- buf[0] = '\0';
-
- if (!strinput(buf,sizeof(buf)-1))
- return FALSE;
- else
- {
- i = dpatoi(buf);
- if (i==DPATOI_ERROR)
- {
-
- for ( i=strlen(buf) ; i>0 ; i--)
- printf("\010 \010");
-
- goto getval2_rep;
- }
- }
-
- *val = i;
- return TRUE;
- }
-
- /*---------------------------------------------------------------------------*/
-
- bool iscardexist(void)
- {
- if (Cardnum>0)
- return TRUE;
-
- dp_errmes("カードがありません.");
- return FALSE;
- }
-
- /*---------------------------------------------------------------------------*/
-
- void *dp_malloc(size_t len)
- {
- void *p = malloc(len);
-
- if (p==NULL)
- dp_errmes("メモリ不足です");
-
- return p;
- }